"""
jsonpath的安装及使用方式：
    pip安装：
        pip install jsonpath
    jsonpath的使用：
        obj = json.load(open('json文件'，'r'，encoding='utf-8'))
        ret = jsonpath.jsonpath(obj，'jsonpath语法')
    !!!需要注意的是jsonpath只能操作本地文件，而xpath二者皆可！！！
"""
import json
import jsonpath

# jsonPath教程推荐：https://blog.csdn.net/luxideyao/article/details/77802389


obj = json.load(open('20.解析_jsonpath.json', 'r', encoding='utf-8'))

# 所有书的作者
all_author = jsonpath.jsonpath(obj, '$..author')
print(all_author)

# 书店所有书的作者
all_author_store = jsonpath.jsonpath(obj, '$..store..book..author')
print(all_author_store)

# store的所有元素。所有的bookst和bicycle
all_store_element = jsonpath.jsonpath(obj, '$..store.*')
print(all_store_element)

# store里面所有东西的price
all_price = jsonpath.jsonpath(obj, '$..store..price')
print(all_price)

# 第三个书
third_book = jsonpath.jsonpath(obj, '$..book[2]')
print(third_book)

# 最后一本书
last_book = jsonpath.jsonpath(obj, '$..book[(@.length-1)]')
print(last_book)

# 前面的两本书
first_two_book = jsonpath.jsonpath(obj, '$..book[0,1]')
print(first_two_book)
first_two_book = jsonpath.jsonpath(obj, '$..book[:2]')
print(first_two_book)

# 过滤出所有的包含isbn的书。
# 条件过滤需要在在（）的前面添加一个？
all_isbn_book = jsonpath.jsonpath(obj, '$..book[?(@.isbn)]')
print(all_isbn_book)

# 过滤出价格低于10的书。
all_price_less_than_10 = jsonpath.jsonpath(obj, '$..book[?(@.price<10)]')
print(all_price_less_than_10)

# 获取所有元素
all_element = jsonpath.jsonpath(obj, '$..*')
print(all_element)
